package com.googlecode.astoolkit {
	
	import com.googlecode.astoolkit.events.FrankyEvents;
	import com.googlecode.astoolkit.events.GotoEvent;
	import com.googlecode.astoolkit.modules.browser.Browser;
	import com.googlecode.astoolkit.modules.content.ContentModule;
	import com.googlecode.astoolkit.modules.customContextMenu.CustomContextMenu;
	import com.googlecode.astoolkit.modules.title.TitleModule;
	import com.googlecode.astoolkit.utils.Sitemap;
	import com.googlecode.astoolkit.utils.SpriteUtils;
	
	import flash.events.Event;
	
	public class BasicSite extends AbstractMVC {
		
		private static var _titleModule:TitleModule;
		private static var _contentModule:ContentModule; 
		private static var _browserModule:Browser;
	 	
		public function BasicSite(xmlPath:String="") {
			super(xmlPath);
		}
		
		// 
		override protected function createModules():void {

			// MODULO CONTENIDO
			_contentModule = new ContentModule();
			addChild(_contentModule);
			
			// MODULO MENU CONTEXTUAL
			var customMenuModule:CustomContextMenu = new CustomContextMenu(SpriteUtils.getRoot(this));
			
			// MODULO BROWSER
			_browserModule = Browser.getInstance();
			_browserModule.addEventListener(FrankyEvents.PATH_CHANGED, onPathChanged); 
			_browserModule.addEventListener(FrankyEvents.PARAMS_CHANGED, onParamsChanged); 
			
			// Registro el GOTO de la API
			FrankyApi.addEventListener(GotoEvent.GOTO, onGoto);
			
		}
		
		
		
		//
		private static function onGoto(e:GotoEvent):void{
			//trace("path-->" + path);
			_browserModule.goto(e.path, e.params);
			//_browserModule.goto(e.path, {nombre:"Iván", apellido:"Gajate", edad:31});
		}
		
		// Handler del evento del Browser
		private function onPathChanged(e:Event=null):void{
			//trace("ANTES _browserModule.path-->" + _browserModule.path);
			if(_browserModule.path == ""){
				_browserModule.goto(Sitemap.defaultPath, _browserModule.params);
				return;
			}
			//trace("DESPUES _browserModule.path-->" + _browserModule.path);
			_contentModule.changePath(_browserModule.path, _browserModule.params);
			Browser.setTitle(TitleModule.changePath(_browserModule.path));
		}
		
		private function onParamsChanged(e:Event=null):void {
			dispatchEvent(new Event(FrankyEvents.PARAMS_CHANGED));
			//Browser.setTitle();
		}
		
	}
}
